import axios from 'axios'
import qs from 'qs'
import { baseUrl } from '../config/config'
import { Message } from 'iview'
/***********************axios拦截器***************************** */
//请求拦截
axios.interceptors.request.use(function (config) {
    // Message.loading({
    //     content: '正在加载中...',
    //     duration: 0
    // });
    if (sessionStorage.getItem("token")) {
        config.headers['Authorization'] = sessionStorage.getItem("token");// 让每个请求携带token--['sessionToken']为自定义key 请根据实际情况自行修改
    };
    return config;
}, error => {
    return Promise.reject(error);
})
// 响应拦截（配置请求回来的信息）
axios.interceptors.response.use(function (response) {
    if (response.status != 200) {
        // let response = {
        //     code: response.status,
        //     errMsg: '网络似乎是不通的'
        //   }
        return response;
    } else {
        return response;
    }
}, function (error) {
    errorState(error)
});

//成功后返回的状态
function successState(res) {
    // 统一判断后端返回的错误码
    // if(res.data.errCode == '000002'){
    //     console.log('网络异常');
    // }else if(res.data.errCode != '000002'&&res.data.errCode != '000000') {
    //     console.log('网络异常');
    // }
}

//错误返回状态
function errorState(error) {
    console.log(error);
    if (error.response.status) {
        switch (error.response.status) {
            // 401: 未登录    
            // 未登录则跳转登录页面，并携带当前页面的路径    
            // 在登录成功后返回当前页面，这一步需要在登录页操作。    
            case 401:
                // 跳转登录页面    
                break;
            // 403 token过期    
            // 登录过期对用户进行提示    
            // 清除本地token和清空vuex中token对象    
            // 跳转登录页面    
            case 403:
                Message.error("登录过期，请重新登录");
                localStorage.removeItem('token');
                // 跳转登录页面 
                break;
            case 404:
                Message.error("网络似乎是不通的");
                break

            default:
                return Promise.reject(error);
        }
    }

}

/************************axios拦截器***************************/

const httpServer = (opts) => {
    let httpDefaultOpts = {
        method: opts.method, //判断post还是get
        baseURL: baseUrl,
        url: opts.url, //url地址
        timeout: 10000, //时间
        data: opts.oSend,
        params: opts.oSend,
        headers: opts.method == 'get' ? {
            'X-Requested-With': 'XMLHttpRequest',
            'Accept': 'application/json',
            'Content-Type': 'application/json; charset=UTF-8'
        } : {
                'X-Requested-With': 'XMLHttpRequest',
                'Accept': 'application/json',
                // 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                'Content-Type': 'application/json; charset=UTF-8'
            }
    };
    //判断是否是get或者是post
    if (opts.method == 'get') {
        delete httpDefaultOpts.data
    } else {
        delete httpDefaultOpts.params
    };
    //axios调用接口
    return new Promise((resolve, reject) => {
        axios(httpDefaultOpts).then(
            (res) => {
                successState(res)
                resolve(res)
            }
        ).catch(
            (response) => {
                errorState(response)
                reject(response)
            }
        )
    })
} 